package util;

import static constant.NumberConstant.*;
/**
 * @Author Antony
 * @Since 2018/6/25 10:43
 */
public class NumberUtil {

    // 阶乘
    public static int factorial(int num){
        if(num <=0){
            return 0;
        }
        int result = 1;
        while(num>0){
            result *=num--;
        }
        return result;
    }

    public static char toChar(int number, int radix){
        if(radix < MIN_RADIX || radix > MAX_RADIX){
            throw new IllegalArgumentException("radix is illegal");
        }
        if(number >= radix){
            throw new IllegalArgumentException("for input math:"+number + ", radix:"+radix);
        }

        return 'a';
    }


    /**
     * digit 计数单位
     *
     * 转化指定进制的字符为十进制数字，如果出错则为-1 <br/>
     * 根据char型的ASCII码顺序计算，将char之间加减运算，转化为整形值    <br/>
     * 顺序为 0~9 A~Z a~z 并且最小进制为2，最大进制为36 <br/>
     * 算出结果要判断必须在 [0,radix) 的半开半闭区间内，否则返回-1 <br/>
     * @param c
     * @param radix
     * @return
     */
    public static int digit(char c, int radix){
        if(radix < MIN_RADIX || radix > MAX_RADIX){
            return -1;
        }
        int offset = 0; //偏移量, 如果大于9，则在字母位上，偏移量需要+10
        int result = c - '0';
        if(result > 9){
            offset = 10;
            result = c - 'A';
        }
        if(result > 25){
            offset = 10;
            result = c - 'a';
        }
        result +=offset;
        return result>=0 && result<radix ? result : -1;
    }
}
